package com.campus.counseling.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.campus.counseling.entity.PaymentRecord;
import com.campus.counseling.model.dto.DistributeIncomeDTO;
import com.campus.counseling.model.dto.RefundFormDTO;
import com.campus.counseling.model.vo.PaymentRecordVO;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;

public interface PaymentService {
    
    /**
     * 创建支付订单
     * @param appointmentInfo 预约信息
     * @return 支付表单
     */
    String createPayment(String appointmentInfo);
    
    /**
     * 处理支付通知
     * @param params 通知参数
     */
    void handlePaymentNotify(Map<String, String> params);
    
    /**
     * 处理支付返回
     * @param params 返回参数
     */
    void handlePaymentReturn(Map<String, String> params);
    
    /**
     * 申请退款
     * @param refundFormDTO 退款表单DTO
     */
    void refund(RefundFormDTO refundFormDTO);
    
    /**
     * 根据订单号获取支付记录
     */
    PaymentRecord getByOrderNo(String orderNo);
    
    /**
     * 分页查询支付记录
     */
    Page<PaymentRecordVO> getPaymentPage(Integer pageNum, Integer pageSize, String orderNo, String status);
    
    /**
     * 获取学生支付记录
     */
    Page<PaymentRecord> getStudentPayments(Integer pageNum, Integer pageSize);
    
    /**
     * 获取咨询师收款记录
     */
    Page<PaymentRecordVO> getCounselorPayments(Integer pageNum, Integer pageSize);
    
    /**
     * 根据预约ID获取支付记录
     */
    PaymentRecord getByAppointmentId(Long appointmentId);
    
    /**
     * 根据日期获取支付记录
     */
    List<PaymentRecord> getPaymentsByDate(LocalDate date);
    
    /**
     * 获取收入列表
     */
    Page<PaymentRecordVO> getIncomeList(Integer pageNum, Integer pageSize, String orderNo, 
            String counselorName, String status, String startDate, String endDate);
    
    /**
     * 获取收入统计
     */
    Map<String, Object> getIncomeStatistics();
    
    /**
     * 分发收入
     */
    void distributeIncome(DistributeIncomeDTO dto);
    
    /**
     * 获取支付状态
     * @param orderNo 订单号
     * @return 支付状态
     */
    String getPaymentStatus(String orderNo);
    
    /**
     * 审核退款申请
     * @param orderNo 订单号
     * @param approved 是否同意
     * @param remark 备注
     */
    void approveRefund(String orderNo, boolean approved, String remark);
    
    /**
     * 取消订单
     * @param orderNo 订单号
     */
    void cancelPayment(String orderNo);
} 